#ifndef __H_STARSHIP
#define __H_STARSHIP

/**
 * @brief StarSystem
 *
 */
typedef struct _StarSystem
{
	char Name[128];
	char Constellation[128];
	double Mass;
	char Description[128];
	int Temperature;
} StarSystem;

/**
 * @brief Starship
 *
 */
typedef struct _Starship
{
	char Name[128];
	int TopSpeed;
	StarSystem Destination;
	char DestinationName[128];
	unsigned char ProcessingOptions;
} Starship;

/**
 * @brief singly linked list of starship
 *
 */
typedef struct _StarshipListNode
{
	Starship starship;
	// next starship node
	struct _StarshipListNode *next;
} StarshipListNode;

/**
 * @brief singly linked list of star system
 *
 */
typedef struct _StarSystemListNode
{
	StarSystem starSystem;
	// next StarSystem node
	struct _StarSystemListNode *next;
} StarSystemListNode;

/**
 * @brief Exploration
 *
 */
typedef struct _Exploration
{
	StarSystemListNode *starSystemList;
	StarshipListNode *starshipList;
} Exploration;

int len_of_StarSystemList(StarSystemListNode *starSystemList);
int len_of_StarshipList(StarshipListNode *starshipSystemList);

StarSystemListNode *getNumberOfSystemList(StarSystemListNode *starSystemListNode, int number);
StarshipListNode *getNumberOfShipList(StarshipListNode *starSystemListNode, int number);

void free_StarShipList(StarshipListNode *starshipListNode);
void free_StarSystemListNode(StarSystemListNode *starSystemListNode);

#endif
